<?
/**
*文件转换类
*/
class convert {


	
	public function __construct(){
	
	}
	
	/************************
	*@说明 创建
	*@创建只支持管理员创建。
	*@parm data为数组
	*/
	public function createKey($data){
		if(!is_array($data))
			return false;
		$data['keyId'] = $this->adminKeyId;//组合KEYid的值
		$sign = $this->md5sign($data,$this->adminSecret);//生成sign串
		if(!$sign)return false;
		
		$conurl = $this->conurl($data,'addkey',$sign);//生成URL
		if(!$conurl)return false;
		
		$grabData = $this->curlCfs($conurl);//抓取数据
		if(!$grabData)return false;
		$dataArr = $this->jsonDecode($grabData);//转换为数据
		if(!$dataArr)return false;
		
		return $dataArr;
		
	}
	
	/************************
	*@说明 修改KEY信息
	*@parm $data(Array) 组合数据
	*@parm $secret(String) 密钥
	*/
	public function updateKey($data,$secret){
		if(!is_array($data))
			return false;
		
		$sign = $this->md5sign($data,$secret);//生成sign串
		if(!$sign)return false;
		
		$conurl = $this->conurl($data,'upkey',$sign);//生成URL
		if(!$conurl)return false;
		
		$grabData = $this->curlCfs($conurl);//抓取数据
		if(!$grabData)return false;
		$dataArr = $this->jsonDecode($grabData);//转换为数据
		if(!$dataArr)return false;
		
		return $dataArr;
	}
	
	/************************
	*@说明 转换文件。
	*@parm $data(Array) 组合数据
	*@parm $secret(String) 密钥
	*/
	public function transform($data,$secret){
		if(!is_array($data))
			return false;
		$sign = $this->md5sign($data,$secret);//生成sign串
		if(!$sign)return false;
		
		$conurl = $this->conurl($data,'queueStorage',$sign);//生成URL
		if(!$conurl)return false;
		
		$grabData = $this->curlCfs($conurl);//抓取数据
		if(!$grabData)return false;
		$dataArr = $this->jsonDecode($grabData);//转换为数据
		if(!$dataArr)return false;
		
		return $dataArr;
		
	}
	
	/************************
	*@说明 数组转json串。
	*@本函数只支持类内部使用。
	*@parm data为数组
	*/
	private function jsonEncode($data){
		if(!is_array($data))
			return false;
		return json_encode($data);
	}
	
	/************************
	*@说明 json串转数组。
	*@本函数只支持类内部使用。
	*@parm data字符串
	*/
	public function jsonDecode($data){
	
		$data = stripslashes($data);//去除反斜杠
		$data = @json_decode($data);
		if(is_array($data) || gettype($data) == 'object')
			return $data;
		else
			return $data;
		
	}
	
	/************************
	*@说明 sign组合加密串。
	*@本函数只支持类内部使用。
	*@parm data为数组
	*@parm secret为服务器获取的secret
	*/
	private function md5sign($data,$secret){
		if(!is_array($data))
			return false;
			
		ksort($data);//按a,b,c,d....为键名排序
		$encrypt = '';
		//只需加密value值。
		foreach($data as $key=>$value){
			if(is_array($value))
				$value = $this->jsonEncode($value);//转换数组和字符串
			$encrypt .= $value;
		}
		
		$encrypt .= $secret;
		$sign = md5($encrypt);//md5加密
		return $sign;
		
	}
	
	/************************
	*@说明 生成转换地址。
	*@本函数只支持类内部使用
	*@parm data为数组
	*@parm interface为接口名称。
	*@parm sign为生成的加密串。
	*/
	private function conurl($data,$interface,$sign){
		if(!is_array($data))
			return false;
			
		$url = $this->conAddress.$interface.'?';
		foreach($data as $key=>$value){
			if(is_array($value))
				$value = $this->jsonEncode($value);//转换数组和字符串
			$url .= $key.'='.urlencode($value).'&';
		}
		$url .= 'sign='.$sign;
		return $url;
	}
	
	/*
	*url触发
	*/
	public function curlCf($url){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch,CURLOPT_TIMEOUT,1);

		$chData = curl_exec($ch);
		curl_close($ch);
		return $chData;
	}
	
	/*
	*url正常抓取
	*/
	public function curlCfs($url){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		//curl_setopt($ch,CURLOPT_TIMEOUT,1);
		$chData = curl_exec($ch);
		curl_close($ch);
		return $chData;
	}
}
?>